package com.iup.tp.twitup.ihm;

import com.iup.tp.twitup.datamodel.IDatabaseObserver;
import com.iup.tp.twitup.datamodel.Twit;
import com.iup.tp.twitup.datamodel.User;

/**
 * Interface de retour console pour l'application.<br/>
 * Cette IHM permet d'être notifié sur la sortie console de toutes les modifications de la base.
 * 
 * @author S.Lucas
 */
public class ConsoleIHM implements IDatabaseObserver
{
  public ConsoleIHM()
  {

  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void notifyTwitAdded(Twit addedTwit)
  {
    System.out.println("Twit ajouté : ");
    this.printTwitInfo(addedTwit);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void notifyTwitDeleted(Twit deletedTwit)
  {
    System.out.println("Twit supprimé : ");
    this.printTwitInfo(deletedTwit);
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void notifyTwitModified(Twit modifiedTwit)
  {
    System.out.println("Twit modifié : ");
    this.printTwitInfo(modifiedTwit);
  }

  /**
   * Affiche les infomations détaillées du twit dans la console.
   * 
   * @param twit
   */
  protected void printTwitInfo(Twit twit)
  {
    System.out.println("-------------------");
    System.out.println("UUID : " + twit.getUuid());
    System.out.println("Twiter : " + twit.getTwiter().getUserTag());
    System.out.println("Text : " + twit.getText());
    System.out.println("-------------------");
    System.out.println("");
  }

  /**
   * Affichage sur ajout d'un utilisateur
   */
  @Override
  public void notifyUserAdded(User addedUser)
  {
    System.out.println("Utilisateur ajouté : ");
    this.printUserInfo(addedUser);
  }

  /**
   * Affichage sur suppression d'un utilisateur
   */
  @Override
  public void notifyUserDeleted(User deletedUser)
  {
    System.out.println("Utilisateur supprimé : ");
    this.printUserInfo(deletedUser);
  }

  /**
   * Affichage sur modification d'un utilisateur
   */
  @Override
  public void notifyUserModified(User modifiedUser)
  {
    System.out.println("Utilisateur modifié : ");
    this.printUserInfo(modifiedUser);
  }

  /**
   * Affiche les infomations détaillées de l'utilisateur dans la console.
   * 
   * @param user
   */
  protected void printUserInfo(User user)
  {
    System.out.println("-------------------");
    System.out.println("UUID : " + user.getUuid());
    System.out.println("Tag : " + user.getUserTag());
    System.out.println("Nom : " + user.getName());
    System.out.print("Follows : ");
    for (String follow : user.getFollows())
    {
      System.out.print(follow);
      System.out.print(" ");
    }
    System.out.println("");
    System.out.println("AvatarPath : " + user.getAvatarPath());
    System.out.println("-------------------");
    System.out.println("");
  }
}
